<?php

/**
 * Fonction de génération d'un fichier CSV.
 * 
 * @param String $path Chemin de création du fichier CSV.
 * @param String $filename Nom du fichier à générer.
 * @param Array $data Tableau des données à écrire dans le fichier CSV.
 * @throws Exception Erreur de création du fichier CSV.
 */
function writeCSV($path,$filename, $data){
	
	global $logger;
	
	// Chemin de destination du fichier CSV
	$filepath = $path . $filename;
	
	// Ouverture du fichier 
	$fp = fopen($filepath, 'w');
	
	if (!$fp){
		throw new Exception("Erreur de création du fichier CSV : " . $filepath);
	}
	
	// Ecriture du header en mode developpement seulement
	if (MM_DEV_MODE){
		fputs($fp, implode(array_keys($data[0]), ';')."\r\n");
	}
	
	// Ecriture des données dans le fichier CSV
	foreach ($data as $fields) {
		fputs($fp, implode($fields, ';')."\r\n");
	}
	
	$logger->info("Génération du fichier CSV: " . $filepath);
	
	fclose($fp);
}

/**
 * Lecture d'un fichier CSV.
 * 
 * @param String $filepath Chemin du fichier à parser.
 * @throws Exception
 * @return array La liste des données du fichier CSV.
 */
function readCSV($filepath){
	
	global $logger;
	
	$logger->info("Analyse du fichier CSV: " . $filepath);
	
	// Ouverture du fichier
	$fp = fopen($filepath, 'r');
	
	if (!$fp){
		throw new Exception("Erreur d'ouverture du fichier CSV : " . $filepath);
	}
	
	$data = array();
	$count = 0;
	
	// Lecture ligne par ligne du fichier CSV
    while (($buffer = fgets($fp, 4096)) !== false) {
    	if (!empty($buffer)){
    		$buffer = trim($buffer);
       		$data[$count] = explode (";" ,$buffer);
       		$count++;
    	}
    };
    
    $logger->info("Lignes de données lues : " . $count);
    
    // Si on arrive pas à la fin c'est qu'il y a eu une erreur
    if (!feof($fp)) {
        throw new Exception("Erreur de lecture du fichier CSV : " . $filepath);
    }
    
    fclose($fp);
    
    return $data;
}
